package com.moyoutian.sort;

import com.moyoutian.utils.ArrayUtils;

/**
 * 冒泡排序练习
 * 思想概述：
 * 数据依次进行比较大的或者小的数据向后移动
 */
public class BubbleSort {

    public static void main(String[] args) {
        int[] ints = {5, 1, 3, 2, 0, 9, 7, 8, 11, 23, 4};
//        int[] ints = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
//        int[] ints = {0, 1, 2, 3, 4, 5, 7, 8, 9, 11, 23};
        ArrayUtils.printArray("原始", ints);
        sort(ints);
        ArrayUtils.printArray("结果", ints);
    }

    /**
     * 冒泡普通版
     *
     * @param ints 待排序数组
     */
    public static void sort(int[] ints) {
        for (int i = 0; i < ints.length - 1; i++) {
            for (int n = 1; n < ints.length - i; n++) {
                if (ints[n - 1] > ints[n]) {
                    ArrayUtils.swap(ints, n - 1, n);
                }
            }
            ArrayUtils.printArray("sort第" + i + "次", ints);
        }
    }

    /**
     * 冒泡超级版，增加判断逻辑
     *
     * @param ints 待排序数组
     */
    public static void sortPro(int[] ints) {
        for (int i = 0; i < ints.length - 1; i++) {
            boolean flag = true;
            for (int n = 1; n < ints.length - i; n++) {
                if (ints[n - 1] > ints[n]) {
                    flag = false;
                    ArrayUtils.swap(ints, n - 1, n);
                }
            }
            if (flag)
                return;
            ArrayUtils.printArray("sortPro第" + i + "次", ints);
        }
    }
}
